/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.reporte.accion;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import org.reporte.control.AbstractFacade;
import org.reporte.control.Conexion;
import org.reporte.modelo.ParametroReporte;
import org.reporte.modelo.ParametroReportePK;
import org.reporte.utils.EncriptadorED;
import org.reporte.utils.JsfAyuda;

/**
 *
 * @author 43579648
 */
@ManagedBean
@SessionScoped
public class ParametroReporteManejador extends AbstractFacade<ParametroReporte> {

    private List<ParametroReporte> listaParametroReporte;
    private boolean datosExternos;
    private boolean nuevaEntidad;
    private boolean cambiaEventoValor;
    
    
    /** Creates a new instance of ParametroReporteManejador */
    public ParametroReporteManejador() {
        super(ParametroReporte.class);
    }
    

    @Override
    protected EntityManager getEntityManager() {
        return Conexion.getEntityManager();
    }
    
    
    public void instanciaNuevaEntidad(){
        this.setEntity(new ParametroReporte());
        this.getEntity().setParametroReportePK(new ParametroReportePK());
        this.setNuevaEntidad(true);
        //Seteando el Entity.Reporte desde reporteManejador
        this.getEntity().setReporte(
                ((ReporteManejador)JsfAyuda.getBean("reporteManejador")).getEntity()
            );
    }   
    
    
    
    public void guardarEntidad(){
        try{
            //Seteando el idPK compuesto con el id del Reporte
            this.getEntity().getParametroReportePK().setIdReporte(this.getEntity().getReporte().getIdReporte());
            
            if(isNuevaEntidad()){
                //Guardando el parametro Reporte
                this.create(); 
                this.setNuevaEntidad(false);
            }else{
                //Modificando el parametro Reporte
                this.edit();
            }
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " " + JsfAyuda.getPropertyValue("managedBeanGuardadoExitosamente"));
            //Si son datos externos recargara la lista de las modificaciones realizadas a la entidad externa
            if(isDatosExternos()){ 
                recargarContextoParametroReporte();
            }
        }catch(Exception e){
            e.printStackTrace();
            JsfAyuda.lanzarMensajeError(JsfAyuda.getPropertyValue("managedBeanErrorGuardar") +  " - " + e.getCause().getMessage());
        }
    }
    
    public void eliminarEntidad(){
        try{
            System.out.println("INGRESANDO A ELIMINAR ENTIDAD");
            this.remove();
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " " + JsfAyuda.getPropertyValue("managedBeanEliminadoExitosamente"));
            //Si son datos externos recargara la lista de las modificaciones realizadas a la entidad externa
            if(isDatosExternos()){
                recargarContextoParametroReporte();
            }
        }catch(Exception e){
            e.printStackTrace();
            JsfAyuda.lanzarMensajeError(JsfAyuda.getPropertyValue("managedBeanErrorEliminar") + " - " + e.getMessage());
        }
    }
     
    
    public void cerrarDialogoParametro(){
        this.setNuevaEntidad(false);
    }
    
    public void accionCambiaEventoValor(){
        getEntity().setEncriptarValor(false);
    }
    
    
    public void recargarContextoParametroReporte(){
        ReporteManejador reporte = ((ReporteManejador)JsfAyuda.getBean("reporteManejador"));
        reporte.getEntityManager().refresh(reporte.getEntity());
        listaParametroReporte = reporte.getEntity().getParametroReporteList();
    }
    
    
    public void encriptarValor(){
        System.out.println("Encriptar Valor");
            this.getEntity().setValor(EncriptadorED.getEncriptar(this.getEntity().getValor()));
            this.getEntity().setEncriptarValor(true);
            JsfAyuda.lanzarMensajeInfo(JsfAyuda.getPropertyValue("parametroReporteManagedBeanMensajeEncriptacion"));
    }
    

    public List<ParametroReporte> getListaParametroReporte() {
        if(!isDatosExternos()){
            listaParametroReporte = this.findAll();
        }
        return listaParametroReporte;
    }

    public void setListaParametroReporte(List<ParametroReporte> listaParametroReporte) {
        this.listaParametroReporte = listaParametroReporte;
    }

    public boolean isDatosExternos() {
        return datosExternos;
    }

    public void setDatosExternos(boolean datosExternos) {
        this.datosExternos = datosExternos;
    }

    public boolean isNuevaEntidad() {
        return nuevaEntidad;
    }

    public void setNuevaEntidad(boolean nuevaEntidad) {
        this.nuevaEntidad = nuevaEntidad;
    }

    public boolean isCambiaEventoValor() {
        return cambiaEventoValor;
    }

    
    
    
}
